package com.jsptpd.smartauth.common.config.mybatis;

import com.baomidou.mybatisplus.mapper.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;

import java.lang.reflect.Field;
import java.util.Date;
import java.util.HashMap;

public class MetaObjectHandlerConfig extends MetaObjectHandler {

    HashMap<Class, Field> classIdFieldMap = new HashMap<>();
    /**
     * 测试 user 表 name 字段为空自动填充
     */
    public void insertFill(MetaObject metaObject) {

        //createTime生成
        setFieldValByName("createTime", new Date(), metaObject);


        //ID生成
//        try {
//            Class<?> theClass = metaObject.getOriginalObject().getClass();
//            if (classIdFieldMap.containsKey(theClass)) {
//                Field declaredField = classIdFieldMap.get(theClass);
//                if (declaredField != null) {
//                    declaredField.set(metaObject.getOriginalObject(), 2L);
//                }
//            } else {
//                boolean isFind = false;
//                Field[] declaredFields = theClass.getDeclaredFields();
//                for (Field declaredField : declaredFields) {
//                    if (declaredField.isAnnotationPresent(TableId.class)) {
//                        declaredField.setAccessible(true);
//                        if (declaredField.get(metaObject.getOriginalObject()) == null) {
//
//                            if(declaredField.getType().equals(Long.class)){
//                                classIdFieldMap.put(metaObject.getOriginalObject().getClass(), declaredField);
//                                declaredField.set(metaObject.getOriginalObject(), 1L);
//                                isFind = true;
//                            }
//
//                        }
//                    }
//                    break;
//                }
//
//                if (!isFind) {
//                    classIdFieldMap.put(metaObject.getOriginalObject().getClass(), null);
//                }
//            }
//        } catch (IllegalAccessException e) {
//            e.printStackTrace();
//        }
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        //更新时间生成
        //mybatis-plus版本2.0.9+
        setFieldValByName("updateTime", new Date(), metaObject);
    }
}
